#define _CRT_SECURE_NO_WARNINGS 1


// Definition for singly-linked list.
   struct ListNode {
      int val;
      ListNode *next;
      ListNode() : val(0), next(nullptr) {}
      ListNode(int x) : val(x), next(nullptr) {}
      ListNode(int x, ListNode *next) : val(x), next(next) {}
  };

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* newhead = new ListNode(-1, head);
        ListNode* prev = newhead;
        ListNode* pcur;
        ListNode* next;
        ListNode* nnext;
        while (prev->next != nullptr && prev->next->next != nullptr)
        {
            pcur = prev->next;
            next = pcur->next;
            nnext = next->next;
            prev->next = next;
            next->next = pcur;
            pcur->next = nnext;
            prev = pcur;
        }
        //pcur = newhead->next;
        //delete newhead;
        //return pcur;
        return newhead->next;
    }
};